//package com.plian.system.service.fr.evaluation.impl;
//
//import cn.hutool.core.lang.Assert;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.plian.Tools.*;
//import com.plian.Tools.pagedata.PageData;
//import com.plian.system.constant.sys.FormStatusConstant;
//import com.plian.system.constant.sys.FormTypeConstant;
//import com.plian.system.entity.fr.evaluation.ApprovalUnit;
//import com.plian.system.mapper.fr.evaluation.ApprovalUnitMapper;
//import com.plian.system.model.CommonCode;
//import com.plian.system.model.ListResult;
//import com.plian.system.mybatis.base.BaseFlowService;
//import com.plian.system.mybatis.base.BaseServiceImpl;
//import com.plian.system.mybatis.search.SearchEntity;
//import com.plian.system.mybatis.search.SearchParamEntiy;
//import com.plian.system.mybatis.search.TokenSearch;
//import com.plian.system.mybatis.support.Condition;
//import com.plian.system.mybatis.support.Query;
//import com.plian.system.service.fr.evaluation.IApprovalUnitService;
//import com.plian.system.service.sys.file.FileService;
//import com.plian.system.service.wf.FormWorkflowService;
//import com.plian.system.vo.fr.evaluation.ApprovalUnitVO;
//import com.plian.system.wrapper.fr.evaluation.ApprovalUnitWrapper;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang.exception.ExceptionUtils;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.util.*;
//
//import static com.plian.system.constant.sys.FormStatusConstant.UNREVIEWED;
//import static com.plian.system.constant.sys.FormTypeConstant.FR_APPROVAL_UNIT;
//
///**
// * <p>
// * 核准管理单位库 服务实现类
// * </p>
// *
// * @author hu song
// * @since 2023-03-22 20:40:09
// */
//@Slf4j
//@Service
//@RequiredArgsConstructor
//public class ApprovalUnitServiceImpl extends BaseServiceImpl<ApprovalUnitMapper, ApprovalUnit> implements IApprovalUnitService, BaseFlowService {
//
//    private final ApprovalUnitMapper approvalUnitMapper;
//    private final ApprovalUnitWrapper approvalUnitWrapper;
//    private final FormWorkflowService formWorkflowService;
//    private final FileService fileService;
//
//    @Override
//    public ListResult<ApprovalUnitVO> findAll(Query query) {
//        ListResult<ApprovalUnitVO> listResult = new ListResult<>(CommonCode.SUCCESS);
//
//        List<SearchEntity> entityList = query.getSearch();
//        if (query.getAscs() == null && query.getDescs() == null) {
//            query.setDescs("create_time");
//        }
//        QueryWrapper<ApprovalUnit> queryWrapper = SearchParamEntiy.getQueryWrapper(
//                Condition.getQueryWrapper(new ApprovalUnit()), entityList
//        );
//
//        TokenSearch<ApprovalUnit> tokenSearch = new TokenSearch<>();
//		tokenSearch.addTokenQuery(queryWrapper, query);
//
//        IPage<ApprovalUnit> page = page(Condition.getPage(query), queryWrapper);
//        listResult.setList(approvalUnitWrapper.entityToVO(page.getRecords()));
//        listResult.setTotal((int) page.getTotal());
//        return listResult;
//    }
//
//    @Override
//    public ApprovalUnitVO detail(ApprovalUnit approvalUnit) {
//        Assert.notNull(approvalUnit.getId(), "id不能为空");
//        return approvalUnitWrapper.entityToVO(getById(approvalUnit.getId()));
//    }
//
//    @Override
//    @Transactional(rollbackFor = Exception.class)
//    public boolean saveOrUpdate(ApprovalUnit entity) {
//        boolean isSaveFlag = false;
//        if (entity.getId() == null) {
//            isSaveFlag = true;
//            entity.setFormType(FormTypeConstant.FR_APPROVAL_UNIT);
//        }
//        boolean result = super.saveOrUpdate(entity);
//
//        // 启动流程
//        if (isSaveFlag && Objects.equals(entity.getFormType(), FormTypeConstant.FR_APPROVAL_UNIT)) {
//            HashMap<String, Object> processVariable = new HashMap<>();
//            formWorkflowService.startProcessAndSimulate(String.valueOf(entity.getId()), String.valueOf(entity.getFormType()), processVariable);
//        }
//
//        // 保存附件
//        if (isSaveFlag) {
//            fileService.saveAll(String.valueOf(entity.getId()), entity.getDocList());
//        } else {
//            fileService.edit(String.valueOf(entity.getId()), entity.getDocList());
//        }
//        return result;
//    }
//
//    @Override
//    public HashMap<String,Object> commit(String id) {
//        handleStatus(Long.valueOf(id), FormStatusConstant.FLOW);
//        //将需要提交的流程变量返回，用于工作流侧
//        return new HashMap<String,Object>();
//    }
//
//    @Override
//    public Boolean finish(String id) {
//        return handleStatus(Long.valueOf(id), FormStatusConstant.FINISH);
//    }
//
//    @Override
//    public Boolean reject(String id, int formState, String comment) {
//        return handleStatus(Long.valueOf(id), formState);
//    }
//
//    @Override
//    public void goBackToStash(String formId) {
//        handleStatus(Long.valueOf(formId), UNREVIEWED);
//    }
//
//    @Transactional(rollbackFor = Exception.class)
//    public Boolean handleStatus(Long id, int updateStatus) {
//        try {
//            ApprovalUnit approvalUnit = getById(id);
//            /**
//             * 设置审批人和审批时间
//             */
//            if (updateStatus == FormStatusConstant.FINISH) {
//                approvalUnit.setApprovedUser(TokenUtil.getTokenUserId());
//                Date now = DateUtil.now();
//                approvalUnit.setApprovedTime(now);
//            }
//            approvalUnit.setStatus(updateStatus);
//            updateById(approvalUnit);
//            log.info("更新[核准管理单位库]id=" + id + "状态为: " + updateStatus + "");
//            return true;
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            return false;
//        }
//    }
//
//    @Override
//    public List<PageData> findByIds(List<String> formIds) {
//        LambdaQueryWrapper<ApprovalUnit> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.in(ApprovalUnit::getId, Func.toLongList(StringUtils.join(formIds, StringPool.COMMA)));
//        List<ApprovalUnit> ApprovalUnits = list(queryWrapper);
//        List<ApprovalUnitVO> ApprovalUnitVOS = approvalUnitWrapper.entityToVO(ApprovalUnits);
//        List<PageData> pageDataList = new ArrayList<>();
//        try {
//            if (CollectionUtil.isNotEmpty(ApprovalUnitVOS)) {
//                for (ApprovalUnitVO vo : ApprovalUnitVOS) {
//                    PageData pd = new PageData();
//                    pd.put("id", vo.getId());
//                    // 集团名称
//                    pd.put("UNITNAME", vo.getDeclareUnitName());
//                    pd.put("APPLICANTNAME", vo.getCreateUserName());
//                    pd.put("applicantId", vo.getCreateUser());
//                    pd.put("applyOrganizationId", vo.getDeclareUnitId());
//                    pd.put("formType", vo.getFormType());
//                    // 企业名称
//                    pd.put("orgName", vo.getDeclareUnitName());
//                    pageDataList.add(pd);
//                }
//            }
//
//            return pageDataList;
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//        }
//        return pageDataList;
//    }
//
//    @Override
//    public List<Integer> getFormType() {
//        return Arrays.asList(FR_APPROVAL_UNIT);
//    }
//
//    @Override
//    public boolean isApprovalUnit(String orgId) {
//        return CollectionUtil.isNotEmpty(approvalUnitMapper.selectList(new LambdaQueryWrapper<>(new ApprovalUnit()).eq(ApprovalUnit::getDeclareUnitId, orgId).eq(ApprovalUnit::getStatus, 3)));
//    }
//}
